<?php
/**
 *   获取当前栏目信息列表
 * @param
 * @date 2019/12/2
 * @author Xiaohui Zeng
 */

namespace app\blog\controller;


use app\model\CmsContent;

class Content extends Base
{
    /**
     *   带分页 每页默认8条 默认第一页
     *   @param $classId $page $pageSize $title 模糊搜索 $orderBy 默认按发布时间降序
     *   @date 2019/12/2
     *   @author Xiaohui Zeng
     */
    public function index($classid='', $page=1, $pageSize=8, $title='', $hide=0, $orderBy='newtime') {
        $Redis = new Redis();
        $ContentListData = $Redis->get('CmsContentList-'.$classid.'-'.$page.'-'.$pageSize.'-'.$title.'-'.$hide.'-'.$orderBy);
        if($ContentListData) {
            $listObj = $ContentListData;
            return $listObj;
        }
        if(strlen($pageSize)) {
            $limit = $pageSize;
        } else {
            $limit = config('apiAdmin.ADMIN_LIST_DEFAULT');
        }
        $obj = new CmsContent();
        if (strlen($classid)) {
            $obj = $obj->where('classid', $classid);
        }
        if (strlen($hide)) {
            $obj = $obj->where('hide', $hide);
        }
        if (strlen($title)) {
            $obj = $obj->whereLike('title', "%{$title}%");
        }
        $listObj = $obj->order($orderBy, 'DESC')->hidden(['content'])->paginate($limit, false, ['page' => $page])->toArray();
        $util = new util(); // 工具类
        for ($i = 0; $i < count($listObj['data']); $i++) {
            $listObj['data'][$i] = $util->tagName($listObj['data'][$i]); // 处理tagname为数组
        }
        // 列表带classid-page-pageSize-title-hide-orderBy缓存1小时
        $Redis->save('CmsContentList-'.$classid.'-'.$page.'-'.$pageSize.'-'.$title.'-'.$hide.'-'.$orderBy, $listObj,60*60*1);
        return $listObj;
    }
    /**
     *   获取内容详情
     *   @param $id ->hidden(['password'])
     *   @date 2019/12/3
     *   @author Xiaohui Zeng
     */
    public function detail($id) {
        $Redis = new Redis();
        $CmsDetailData = $Redis->get('CmsDetail-'.$id);
        if($CmsDetailData) {
            $listObj = $CmsDetailData;
            return $listObj;
        } else {
            $listObj = CmsContent::get(['id' => $id]);
            if(!$listObj) {
                // 如果数据不存在 抛出404异常
                abort(404, '页面不存在');
                return;
            }
            $util = new util(); // 工具类
            $util->tagName($listObj); // 处理tagname为数组
            // 查询上一篇/ 下一篇
            //上一篇
            $up = CmsContent::where('id','<',$id)->hidden(['content'])->order('id DESC')->limit('1')->find();
            if ($up['id'] <= $id) {
                $util->tagName($up); // 处理tagname为数组
            } else {
                $up['title'] = '返回列表';
            }
            $listObj['up'] = $up;

            //下一篇

            $down = CmsContent::where('id','>',$id)->hidden(['content'])->order('id ASC')->limit('1')->find();
            if ($down['id'] >= $id) {
                $util->tagName($down); // 处理tagname为数组
            } else {
                $down['title'] = '返回列表';
            }
            $listObj['down'] = $down;
            // 查询上一篇/ 下一篇 end
            $Redis->save('CmsDetail-'.$id, $listObj,60*60*24); // 单篇文章 缓存24小时
        }
        if($listObj){
            return $listObj;
        }
    }
    /**
     *   随机获取几条数据
     *   @param $num 取几条  $hide 默认状态为显示
     *   @date 2019/12/3
     *   @author Xiaohui Zeng
     */
    public function getRandom($num=4,$hide=0){
        $ids = CmsContent::where('hide',$hide)->column('id'); // 查询id字段所有的id集合
        shuffle($ids); // 数组重排 实现随机 不会重复 不会抓到空值
        $ids = array_slice($ids,0,$num); // 取前几个id
        $listObj = CmsContent::all($ids); // 根据主键获取数据 有几个id 获取几个数据
        $util = new util(); // 工具类
        for( $i=0; $i<count($listObj); $i++) {
            $listObj[$i]['content'] = ''; // 临时处理不显示字段
            $listObj[$i] = $util->tagName($listObj[$i]); // 处理tagname为数组
        }
        return $listObj;
    }
}